﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;

using SpiritAlight.Input;

namespace SpiritAlight.Character
{
    /// <summary>
    /// キャラクターの向きを表します。
    /// </summary>
    public enum Direction
    {
        Up = 0,
        Down = 1,
        Left = 2,
        Right = 3,
    }

    /// <summary>
    /// キャラクターの状態を表します。
    /// </summary>
    public enum CharacterState
    {
        Wait = 0,
        Damage = 1,
        Attack = 2,
    }

    /// <summary>
    /// キャラクターを作る際に実装するインターフェース。
    /// </summary>
    interface ICharecter
    {
        #region プロパティ

        /// <summary>
        /// キャラクター位置。
        /// </summary>
        Vector2 Position { get; set; }

        /// <summary>
        /// キャラクター方向。
        /// </summary>
        Direction Direction { get; }

        /// <summary>
        /// キャラクター状態。
        /// </summary>
        CharacterState State { get; }

        /// <summary>
        /// キャラクター歩行中フラグ。
        /// </summary>
        bool IsMoving { get; }
        
        #endregion

        # region メソッド

        /// <summary>
        /// 初期化処理
        /// </summary>
        void Initialize();

        /// <summary>
        /// リソース読み込み
        /// </summary>
        /// <param name="Content"></param>
        void LoadContent(ContentManager Content);

        /// <summary>
        /// 更新処理
        /// </summary>
        /// <param name="inputState"></param>
        void Update(InputState inputState);

        /// <summary>
        /// 描画処理
        /// </summary>
        /// <param name="spriteBatch"></param>
        /// <param name="sceneColor"></param>
        void Draw(SpriteBatch spriteBatch, Color sceneColor);

        #endregion

    }
}
